package org.wikinews.controller;

import java.io.Serializable;
import java.util.List;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.Transactional;
import org.jboss.seam.annotations.web.RequestParameter;
import org.wikinews.model.Post;
import org.wikinews.model.Tag;
import org.wikinews.model.Usuario;
import org.wikinews.repo.PostRepo;
import org.wikinews.repo.UsuarioRepo;

@Name("listarAutorCtrl")
@Scope(ScopeType.PAGE)
public class ListarAutorCtrl implements Serializable {

	private static final long serialVersionUID = 6612582663398485318L;

	@In
	private PostRepo postRepo;

	@In
	private UsuarioRepo usuarioRepo;

	@RequestParameter
	private Long usuarioId;
	
	private Tag pesquisaTag = new Tag();

	private List<Post> postsFavoritos;
	
	private List<Usuario> autoresFavoritos;

	private List<Usuario> seguidores;

	private List<Usuario> autoresMaisSeguidos;

	private List<Usuario> autoresInteressesComum;

	private List<Tag> minhasTags;

	private List<Usuario> autoresMaisRicos;
	
	public Tag getPesquisaTag() {
		return pesquisaTag;
	}
	
	public List<Post> getPostsFavoritos() {
		if (postsFavoritos == null) {
			postsFavoritos = postRepo.getFavoritos(usuarioId);
		}
		return postsFavoritos;
	}

	public List<Usuario> getAutoresFavoritos() {
		if (autoresFavoritos == null) {
			autoresFavoritos = usuarioRepo.getFavoritos(usuarioId);
		}
		return autoresFavoritos;
	}

	public List<Usuario> getSeguidores() {
		if (seguidores == null) {
			seguidores = usuarioRepo.getSeguidores(usuarioId);
		}
		return seguidores;
	}

	public List<Usuario> getAutoresMaisSeguidos() {
		if (autoresMaisSeguidos == null) {
			autoresMaisSeguidos = usuarioRepo.getMaisSeguidos(null);
		}
		return autoresMaisSeguidos;
	}

	public List<Usuario> getAutoresMaisRicos() {
		if (autoresMaisRicos == null) {
			autoresMaisRicos = usuarioRepo.getMaisRicos();
		}
		return autoresMaisRicos;

	}

	public List<Tag> getMinhasTags() {
		if (minhasTags == null) {
			minhasTags = usuarioRepo.getTags(usuarioId);
		}
		return minhasTags;
	}

	public List<Usuario> getAutoresInteressesComum() {
		if (autoresInteressesComum == null) {
			autoresInteressesComum = usuarioRepo.getAutoresComTagsEmComum(usuarioId);
		}
		return autoresInteressesComum;
	}

	@Transactional
	public String exibirAutoresMaisSeguidos() {
		inicializarFiltroPesquisa();
		return "/AutoresMaisSeguidos.xhtml";
	}

	@Transactional
	public String pesquisarAutores() {
		autoresMaisSeguidos = usuarioRepo.getMaisSeguidos(pesquisaTag);
		return null;
	}

	@Transactional
	public String limparPesquisaAutores() {
		inicializarFiltroPesquisa();
		return null;
	}

	private void inicializarFiltroPesquisa() {
		pesquisaTag = new Tag();
		autoresMaisSeguidos = usuarioRepo.getMaisSeguidos(null);
	}
	
}
